package juego;

import java.lang.Math;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;



public class Helicoptero extends Colateral{
	
	//atributos de clase
	private static int misPuntosPorDestruccion = -200;
	private static int miTamanio = 5;//3
	private static int miRadioGiro = 10;
	private static int miArco = 10;//((2*(Math.PI))/20);

	//atributos de instancia
	private Coordenada centro;
	private int angulo;
	
            
    //constructor. Recibe dos enteros. Ubica el centro de su movimiento en y - 10
    public Helicoptero(int x, int y){
    	super(x,y);
    	int centroEnY = (y - miRadioGiro);
    	this.centro = new Coordenada(x,centroEnY);
    	this.angulo = 0;
    };
    
   //metodos
	
    //retorna el tamanio del helicoptero
	public int verTamanio() {
    	return miTamanio;
    };
    
    //redefinicion. Se encarga de realizar el movimiento
    @Override
    protected void movimientoPropio() {
    	int enX = (int)((miRadioGiro)*Math.sin(angulo)); 
        int enY = (int)((miRadioGiro)*Math.cos(angulo)); 
        int coordenadaX = centro.obtenerCoordenadaX() + enX;
        int coordenadaY = centro.obtenerCoordenadaY() + enY;
        Coordenada otraCoordenada = new Coordenada(coordenadaX,coordenadaY);
        this.ubicacion = otraCoordenada;
    	angulo = angulo + (miArco);
    	
    };
    
    //retorna el puntaje por la destruccion del helicoptero
    @Override
    protected int puntajePorDestruccion(){
    	return misPuntosPorDestruccion;
    };
    
//    public Element getElement(Document doc) {
//		Element nave = doc.createElement("Helicoptero");
//		
//		Element ubicacion = this.ubicacion.getElement(doc);
//		nave.appendChild(ubicacion);
//		
//		Boolean valorVivo = new Boolean(this.vivo);
//		Element vivo = doc.createElement("Vivo");
//		nave.appendChild(vivo);
//		vivo.setTextContent(valorVivo.toString());
//		
//		Integer valorAngulo = new Integer(this.angulo);
//		Element angulo = doc.createElement("Angulo");
//		nave.appendChild(angulo);
//		angulo.setTextContent(valorAngulo.toString());
//	
//		//creo un elemento centro y le inserto otro elemento
//		//llamado Coordenada
//		Element centro = doc.createElement("Centro");
//		centro.appendChild(this.centro.getElement(doc));
//		nave.appendChild(centro);
//		
//		return nave;
//	}
	
    public Element getElement(Document doc) {
		Element nave = doc.createElement("Helicoptero");
		
		this.persistirColateral(doc, nave);
		
		Integer valorAngulo = new Integer(this.angulo);
		Element angulo = doc.createElement("Angulo");
		nave.appendChild(angulo);
		angulo.setTextContent(valorAngulo.toString());
	
		//creo un elemento centro y le inserto otro elemento
		//llamado Coordenada
		Element centro = doc.createElement("Centro");
		centro.appendChild(this.centro.getElement(doc));
		nave.appendChild(centro);
		
		return nave;
	}
    
//	public static Helicoptero fromElement(Element element) {
//		Helicoptero nave = new Helicoptero(-1,-1);
//		
//		NodeList childs = element.getChildNodes();
//		for (int i = 0; i < childs.getLength(); i++) {
//			Node child = childs.item(i);
//			if (child.getNodeName().equals("Coordenada")) {
//				nave.ubicacion = Coordenada.fromElement((Element) child);
//			}
//			else if (child.getNodeName().equals("Vivo")) {
//				nave.vivo = Boolean.parseBoolean(child.getTextContent());
//			}
//			else if (child.getNodeName().equals("Angulo")) {
//				nave.angulo = Integer.parseInt(child.getTextContent());
//			}
//			else if (child.getNodeName().equals("Centro")) {
//				//obtengo a su vez la lista de hijos de este nodo
//				NodeList listaNietos = child.getChildNodes();
//				for (int j = 0; j < listaNietos.getLength();j++) {
//					Node nieto = listaNietos.item(j);
//					if (nieto.getNodeName().equals("Coordenada")) {
//						nave.centro = Coordenada.fromElement((Element) nieto);
//					}
//				}
//			}
//		}
//			
//		return nave;
//	}
	
    public static Helicoptero fromElement(Element element) {
		Helicoptero nave = new Helicoptero(-1,-1);
		Colateral.recuperarColateral(element,nave);
		recuperarPropios(element,nave);
			
		return nave;
	}
    
    private static void recuperarPropios(Element element, Helicoptero helicoptero) {
		NodeList childs = element.getChildNodes();
		for (int i = 0; i < childs.getLength(); i++) {
			Node child = childs.item(i);
			if (child.getNodeName().equals("Angulo")) {
				helicoptero.angulo = Integer.parseInt(child.getTextContent());
			}
			else if (child.getNodeName().equals("Centro")) {
				//obtengo a su vez la lista de hijos de este nodo
				NodeList listaNietos = child.getChildNodes();
				for (int j = 0; j < listaNietos.getLength();j++) {
					Node nieto = listaNietos.item(j);
					if (nieto.getNodeName().equals("Coordenada")) {
						helicoptero.centro = Coordenada.fromElement((Element) nieto);
					}
				}
			}
		}
	}
    
    
	public Coordenada verCentro(){
		return this.centro;
	}
	
    
       
}
